package com.yx.fsysserver.file.component;

import com.yx.fsysserver.user.domain.User;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Date;

@Component
public class HelloSender implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @PostConstruct
    public void init() {
        rabbitTemplate.setConfirmCallback(this);
        rabbitTemplate.setReturnCallback(this);
    }

    public void sendString() {
        String context = "hello " + new Date();
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("q1", context);
    }
    public void sendObj() {
        User user = new User();
        user.setCreateTime(new Date());
        this.rabbitTemplate.convertAndSend("obj1", user);
    }

    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if (ack) {
            System.out.println("消息发送成功:" + correlationData);
        } else {
            System.out.println("消息发送失败:" + cause);
        }
    }

    /**
     * 生产者通过指定一个exchange 和 routingkey  把消息送达到某个队列中去，然后消费者监听队列，进行消费处理。
     * 但是在某些情况下，如果我们在发送消息时，当前的exchange 不存在或者指定的routingkey路由不到，这个时候如果要监听这种不可达的消息，就要使用 return Listener
     */
    @Override
    public void returnedMessage(Message message, int i, String s, String s1, String s2) {
        System.out.println("不可路由的消息！ message="+message);
    }
}
